package com.ufcg.lvc.client.prototipacao;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.AbsolutePanel;
import com.google.gwt.user.client.ui.Button;
import com.smartgwt.client.util.BooleanCallback;
import com.smartgwt.client.util.SC;
import com.smartgwt.client.widgets.grid.ListGridRecord;
import com.ufcg.lvc.client.GreetingServiceCRUD;
import com.ufcg.lvc.client.GreetingServiceCRUDAsync;
import com.ufcg.lvc.client.UserData;
import com.ufcg.lvc.client.MyListGrids.TurmasListGrid;
public class MinhasTurmas {

	MyPanel panelTurmas;
	private TurmasListGrid listGrid;
	UserData UD;
	
	public MinhasTurmas(UserData uD) {
		UD = uD;
		final AsyncCallback<Boolean> callback = new AsyncCallback<Boolean>() {
			@Override
			public void onFailure(Throwable caught) {
				System.out.println("Erro na comunicação com o servidor");
			}

			@Override
			public void onSuccess(Boolean result) {
			}
		};

		panelTurmas = new MyPanel("Minhas turmas", "Nova turma", "Criar nova turma");

		listGrid = new TurmasListGrid(getServicoCRUD(), UD);
		panelTurmas.add(listGrid, 60, 69);
		
		Button btnExibirTurma = new Button("Exibir");
		panelTurmas.add(btnExibirTurma, 555, 342);
		btnExibirTurma.setSize("91px", "29px");

		Button btnResultados = new Button("Resultados");
		panelTurmas.add(btnResultados, 458, 342);
		btnResultados.setSize("91px", "29px");
		
		btnResultados.addClickHandler(new ClickHandler() {
			@Override
			public void onClick(ClickEvent event) {
				try {
					if (listGrid.getSelectedRecord() != null) {
						ListGridRecord elem = listGrid.getSelectedRecord();
						ResultadoProvas r = new ResultadoProvas(
								elem.getAttribute("nome"),
								elem.getAttribute("disciplina"),
								elem.getAttribute("instituicao"),
								elem.getAttribute("ano"), UD);
						panelTurmas.clear();
						panelTurmas.add(r.getPanel());
					} else {
						Window.alert("Selecione a turma primeiro.");	
					}
				} catch (Exception e) {
					Window.alert("Selecione a turma primeiro.");
				}	
			}
		});
		
		panelTurmas.getBtnCriarNovoObje().addClickHandler(new ClickHandler() {
			@Override
			public void onClick(ClickEvent event) {
				panelTurmas.clear();
				NovaTurma n = new NovaTurma(UD);
				panelTurmas.add(n.getPanel());
			}
		});

		panelTurmas.getBtnEditar().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				try {
					ListGridRecord elem = listGrid.getSelectedRecord();
					NovaTurma n = new NovaTurma(
							elem.getAttribute("nome"),
							elem.getAttribute("disciplina"),
							elem.getAttribute("instituicao"),
							elem.getAttribute("ano"), true, UD);
					panelTurmas.clear();
					panelTurmas.add(n.getPanel());	
				} catch (Exception e) {
					Window.alert("Selecione a turma que deseja editar.");
				}
			}
		});
		

		panelTurmas.getBtnExcluir().addClickHandler(new ClickHandler() {
			@Override
			public void onClick(ClickEvent event) {
				try {
					if (listGrid.getSelectedRecord() != null) {
						SC.ask("Deseja deletar o turma?", new BooleanCallback() {  
		                    public void execute(Boolean value) {  
		                        if (value != null && value) {                          	
		        					ListGridRecord elem = listGrid.getSelectedRecord();
		        					getServicoCRUD().deletarLinha("turma", "nome", elem.getAttribute("nome"), UD.getId_usuario(), callback);
		        					listGrid.loadDados(UD);
 		                        }  
		                    }  
		                });
					} else {
						Window.alert("Selecione a turma que deseja excluir.");
					}
				} catch (Exception e) {
					Window.alert("Selecione a turma que deseja excluir.");
				}
		}});

		btnExibirTurma.addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				try {
					ListGridRecord elem = listGrid.getSelectedRecord();
					ExibirTurma n = new ExibirTurma(
							elem.getAttribute("nome"),
							elem.getAttribute("disciplina"),
							elem.getAttribute("instituicao"),
							elem.getAttribute("ano"), UD);
					panelTurmas.clear();
					panelTurmas.add(n.getPanel());	
				} catch (Exception e) {
					Window.alert("Selecione a turma que deseja exibir.");
				}			
			}
		});
	}
	
	public static GreetingServiceCRUDAsync getServicoCRUD() {
		return GWT.create(GreetingServiceCRUD.class);
	}

	public AbsolutePanel getPanel() {
		return panelTurmas;
	}
}
